/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bab;

/**
 * Permet d'afficher des stats sur la résolution d'un problème de sac à dos
 * @author Florent
 */
public class Bench {

	/**
	 * 
	 * @param data donnée du problème
	 * @return 
	 */
	public static double runOneBench(Data data) {
		int num  = 0;
		double somme = 0.0;
		
		num++;
		System.out.println("\n\n InBagFirstAndBiggestRatio");
		somme += runOneBench(data, new InBagFirstAndBiggestRatio());

		//Code commanté car test de cette heuristique non concluante

		//System.out.println("\n\n FractionnerHeruristique");
		//somme += runOneBench(data, new FractionnerHeuristique(FractionnerHeuristique.Side.ALWAYS_LEFT));

		//System.out.println("\n\n FractionnerHeruristique inversé");
		//somme += runOneBench(data, new FractionnerHeuristique(true));
		
		return somme/num;
	}

	/**
	 * 
	 * @param data donnée du problème
	 * @param heuristique heurisitu
	 * @return 
	 */
	public static double runOneBench(Data data, Heuristique heuristique) {
		//data.printData();
		System.out.println("Number of item  : " +data.getWeights().length + "\n");

		Bab bab;
		double time = System.nanoTime();
		bab = new Bab(data, heuristique);
		time = System.nanoTime() - time;

		System.out.println("Valeur : " + bab.getMaxValue());
		System.out.println("Poids : " + bab.getWeight());
		System.out.println("Solution : " + bab.getSolution());
		System.out.println("Nombre noeud : " + bab.getNumNodeExplore());
		System.out.println(String.format("Time : %.3e ms",time/1e6));

		assert data.solutionAcceptable(bab.getSolution());
		
		return time;
	}	
}
